﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;

public partial class Views_LocationCommunes : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindData();
        }
    }

    protected void ResetControls_windowAddComm()
    {
        cbxProvinces.Value = "";
        cbxDistricts.Value = "";
        lblFormAddCommunes.Text = "";
        txtFormAddName.Text = "";
        chkFormAddStatus.Checked = false;
    }

    protected void ResetControls_windowUpdateComm()
    {
        lblUpdateMsg.Text = "";
    }

    protected void ResetControls_ViewInfor()
    {
        lblViewComID.Text = "";
        lblViewNameOfComm.Text = "";
        chkViewStatusOfComm.Checked = false;
        lblViewNameOfDist.Text = "";
        lblViewNameOfProvince.Text = "";
    }

    protected void BindData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                StoreCommunes.DataSource = db.View_Communes.ToList<View_Communes>();
                StoreCommunes.DataBind();
                GridPanelCommunes.ActiveIndex = -1;
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo hệ thống", "Hệ thống đang bận, hảy thử lại sau").Show();
        }
    }

    protected void StoreCommunes_ReadData(object sender, StoreReadDataEventArgs e)
    {
        BindData();
    }

    protected void RowSelected(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelCommunes.SelectionModel.Primary as RowSelectionModel;
                if (rsm.SelectedRow != null)
                {
                    int commID = Int32.Parse(rsm.SelectedRow.RecordID);
                    View_Communes viewCommSelected = db.View_Communes.Single(p => p.ComID == commID);

                    lblViewComID.Text = viewCommSelected.ComID.ToString();
                    lblViewNameOfComm.Text = viewCommSelected.NameOfComm;
                    chkViewStatusOfComm.Checked = Boolean.Parse(viewCommSelected.StatusOfComm.ToString());
                    lblViewNameOfDist.Text = viewCommSelected.Expr1;
                    lblViewNameOfProvince.Text = viewCommSelected.NameOfProvince;
                }
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void cbxProvinces_SelectedChange()
    {
        try
        {
            Object cbxProvValue = cbxProvinces.Value;
            if (cbxProvValue == null)
            {
                StoreDistricts.DataSource = null;
                StoreDistricts.DataBind();
            }
            else
            {
                int provID = Int32.Parse(cbxProvValue.ToString());
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Province provSelected = db.Provinces.Single(p => p.ProvID == provID);
                    List<District> list = provSelected.Districts.ToList<District>();

                    StoreDistricts.DataSource = list;
                    StoreDistricts.DataBind();
                }
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnToobarAdd_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            //WindowAddCommunes.Hidden = false;
            WindowAddCommunes.Show();
            ResetControls_windowAddComm();

            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                List<Province> list = db.Provinces.ToList<Province>();
                list.Sort((new SortObjectsProvinces()).Compare_ProvinceName_ASC);

                StoreProvinces.DataSource = list;
                StoreProvinces.DataBind();
            }

            StoreProvinces.DataSource = new List<Province>();
            StoreProvinces.DataBind();
            StoreDistricts.DataSource = new List<District>();
            StoreDistricts.DataBind();
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }

    }

    protected void btnAdd_DirectClick(object sender, DirectEventArgs e)
    {
        lblFormAddCommunes.Text = "";
        Object cbxProvValue = cbxProvinces.Value;
        if (cbxProvValue == null)
        {
            lblFormAddCommunes.Text = "Hảy chọn tỉnh thành cần thêm mới xã phường";
            cbxProvinces.Focus(true, 100);
            return;
        }
        Object cbxDistValue = cbxDistricts.Value;
        if (cbxDistValue == null)
        {
            lblFormAddCommunes.Text = "Hảy chọn quận huyện cần thêm mới xã phường";
            cbxDistricts.Focus(true, 100);
            return;
        }
        if (txtFormAddName.Text.Trim().Length == 0)
        {
            lblFormAddCommunes.Text = "Hảy nhập tên xã phường cần thêm mới";
            txtFormAddName.Focus(true, 100);
            return;
        }
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int distID = Int32.Parse(cbxDistValue.ToString());
                District distSelected = db.Districts.Single(d => d.DistID == distID);
                string commNameInsert = txtFormAddName.Text.Trim();

                foreach (var item in distSelected.Communes)
                {
                    if (commNameInsert.Equals(item.NameOfComm.ToLower()))
                    {
                        lblFormAddCommunes.Text = "Tên xã phường đã tồn tại trong huyện này, hảy nhập lại tên xã phường cần thêm mới";
                        txtFormAddName.Focus(true, 100);
                        return;
                    }
                }

                Commune commInsert = new Commune()
                {
                    NameOfComm = txtFormAddName.Text.Trim(),
                    StatusOfComm = chkFormAddStatus.Checked,
                    DistID = distID
                };

                db.Communes.Add(commInsert);
                db.SaveChanges();

                WindowAddCommunes.Hidden = true;
                BindData();

                X.Msg.Alert("Thông báo", "Thêm mới xã phường mới thành công, [ " + commNameInsert + " ]").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnAddCancel_DirectClick(object sender, DirectEventArgs e)
    {
        WindowAddCommunes.Hidden = true;
    }

    protected void btnToobarUpdate_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            RowSelectionModel rsm = GridPanelCommunes.SelectionModel.Primary as RowSelectionModel;
            if (rsm.SelectedRow == null)
            {
                X.Msg.Alert("Thông báo", "Bạn chưa chọn xã phường để cập nhật thông tin").Show();
                return;
            }
            else
            {
                WindowUpdateCommunes.Hidden = false;

                int commIDSelected = Int32.Parse(rsm.SelectedRow.RecordID);
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Commune commUpdating = db.Communes.Single(c => c.ComID == commIDSelected);

                    TextUpdateProvinceName.Text = commUpdating.District.Province.NameOfProvince;
                    TextUpdateDistrictsName.Text = commUpdating.District.NameOfDist;

                    TextUpdateName.Text = commUpdating.NameOfComm;
                    CheckboxUpdateStatus.Checked = Boolean.Parse(commUpdating.StatusOfComm.ToString());
                }
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void ButtonUpdateCommunes_DirectClick(object sender, DirectEventArgs e)
    {
        lblUpdateMsg.Text = "";
        if (TextUpdateName.Text.Trim().Length == 0)
        {
            lblUpdateMsg.Text = "Hảy nhập tên xã phường cần cập nhật";
            TextUpdateName.Focus(true, 100);
            return;
        }
        try
        {
            RowSelectionModel rsm = GridPanelCommunes.SelectionModel.Primary as RowSelectionModel;
            int commIDUpdate = Int32.Parse(rsm.SelectedRow.RecordID);

            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                Commune commUpdate = db.Communes.Single(c => c.ComID == commIDUpdate);
                commUpdate.NameOfComm = TextUpdateName.Text.Trim();
                commUpdate.StatusOfComm = Boolean.Parse(CheckboxUpdateStatus.Checked.ToString());
                db.SaveChanges();

                WindowUpdateCommunes.Hidden = true;
                BindData();

                X.Msg.Alert("Thông báo", "Cập nhật thông tin xã phường thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void ButtonUpdateCancel_DirectClick(object sender, DirectEventArgs e)
    {
        ResetControls_windowUpdateComm();
        WindowUpdateCommunes.Hidden = true;
    }

    protected void btnToobarDelete_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            RowSelectionModel rsm = GridPanelCommunes.SelectionModel.Primary as RowSelectionModel;
            if (rsm.SelectedRow == null)
            {
                X.Msg.Alert("Thông báo", "Bạn chưa chọn xã phường cần xóa bỏ").Show();
                return;
            }
            else
            {
                int commIDSelected = Int32.Parse(rsm.SelectedRow.RecordID);
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Commune commDeleting = db.Communes.Single(c => c.ComID == commIDSelected);

                    X.Msg.Confirm("Thông báo hệ thống", String.Format("Bạn có muốn xóa xã phường đã chọn ? [{0}]", commDeleting.NameOfComm),
                    new MessageBoxButtonsConfig()
                    {
                        Yes = new MessageBoxButtonConfig
                        {
                            Text = "Xóa",
                            Handler = "App.direct.DoYes_DeleteCommunes();"
                        },
                        No = new MessageBoxButtonConfig
                        {
                            Text = "Hủy bỏ"
                        }
                    }).Show();
                }
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void DoYes_DeleteCommunes()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelCommunes.SelectionModel.Primary as RowSelectionModel;
                int commID = Int32.Parse(rsm.SelectedRow.RecordID);
                Commune comm = db.Communes.Single(d => d.ComID == commID);
                List<Organization> listOrgans = comm.Organizations.ToList<Organization>();
                foreach (var itemOrgan in listOrgans)
                {
                    List<Department> listDeparts = itemOrgan.Departments.ToList<Department>();
                    foreach (var itemDepart in listDeparts)
                    {
                        List<Employee> listEmps = itemDepart.Employees1.ToList<Employee>();
                        foreach (var itemEmp in listEmps)
                        {
                            //Xóa profile của Employee
                            List<Profily> listProfile = itemEmp.Profilies.ToList<Profily>();
                            foreach (var item in listProfile)
                            {
                                db.Profilies.Remove(item);
                            }

                            //Xóa tất cả TranningForestings của Employee
                            List<TrainingFostering> trainList = itemEmp.TrainingFosterings.ToList<TrainingFostering>();
                            foreach (var item in trainList)
                            {
                                db.TrainingFosterings.Remove(item);
                            }

                            //Xóa tất cả EducationsForEmps của employee
                            List<EducationsForEmp> eduList = itemEmp.EducationsForEmps.ToList<EducationsForEmp>();
                            foreach (var item in eduList)
                            {
                                db.EducationsForEmps.Remove(item);
                            }

                            //Xóa tất cả FamilyRelationships của employee
                            List<FamilyRelationship> familyList = itemEmp.FamilyRelationships.ToList<FamilyRelationship>();
                            foreach (var item in familyList)
                            {
                                db.FamilyRelationships.Remove(item);
                            }

                            //Xóa tất cả EmployeesSalaryLevel của employee
                            List<EmployeesSalaryLevel> salarylevalList = itemEmp.EmployeesSalaryLevels.ToList<EmployeesSalaryLevel>();
                            foreach (var item in salarylevalList)
                            {
                                db.EmployeesSalaryLevels.Remove(item);
                            }
                            db.Employees.Remove(itemEmp);
                        }
                        db.Departments.Remove(itemDepart);
                    }
                    db.Organizations.Remove(itemOrgan);
                }
                db.Communes.Remove(comm);
                db.SaveChanges();

                BindData();
                ResetControls_ViewInfor();
                X.Msg.Alert("Thông báo", "Xóa quận huyện thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, hãy thử lại sau.").Show();
        }
    }
}